主题
Kubernetes Pod 与探针机制
一句话机制
Pod 是 Kubernetes 最小调度单元,程序必须部署在容器里、容器必须跑在 Pod 里;每个 Pod 内有一个根容器 Pause 承载 Pod IP(同一 Pod 内所有容器共享)并评估整体健康,kubelet 则通过 探针(Probe) 周期性诊断容器,决定「重启」还是「摘流量」。
Pod 核心结构
- 根容器 Pause:每个 Pod 默认都有一个,两个作用——① 评估整个 Pod 的健康状态;② 上面设置 Pod IP,Pod 内所有容器共享该 IP。
- 分类:普通 Pod(存入 etcd、可被重新调度)vs Static Pod(存于某 node 本地文件、只能在该 node 运行)。
- endpoint:
podIP + containerPort。
生命周期关键状态
| 维度 | 取值 |
|---|---|
| Pod phase | Pending → Running → Succeeded / Failed(另有 Unknown) |
| 容器 state | Waiting / Running / Terminated |
| restartPolicy | Always / OnFailure / Never(重启退避 10s→20s→40s…) |
| Pod Conditions | PodScheduled / ContainersReady / Initialized / Ready |
不变量:Pod 在其生命周期中只被调度一次,一旦绑到某 node 就一直在该 node 上运行,直到停止或被删除。
探针(Probe)
kubelet 对容器的定期诊断,四种探测机制:exec(容器内执行命令)/ grpc / httpGet(HTTP 2xx/3xx)/ tcpSocket(能建 TCP 连接即成功)。
三种探针类型,职责完全不同:
| 探针 | 判断什么 | 失败后的动作 |
|---|---|---|
| livenessProbe | 容器是否存活 | kill 容器,按 restartPolicy 重启 |
| readinessProbe | 容器能否响应请求 | 把 Pod IP 从 Service 的 endpoints 摘除(不重启) |
| startupProbe | 应用是否已启动 | 成功前禁用其他探针,失败则 kill 重启(慢启动容器专用) |
不变量
- Pod 是最小单元,不是容器。调度、IP、生命周期都以 Pod 为粒度。
- 同一 Pod 内所有容器共享一个 Pod IP 与网络命名空间(由 Pause 根容器承载)。
- liveness 管「重启」,readiness 管「流量」——两者判据和解耦是探针的核心心智模型。
常见误解
- ❌ 「Kubernetes 的最小单元是容器」——错。是 Pod,容器必须被 Pod 包裹。
- ❌ 「liveness 和 readiness 差不多」——错。liveness 失败触发重启,readiness 失败只是摘流量不重启,混用会引发无谓重启或「健康却接不到流量」。
- ❌ 「Pod 可以跨节点漂移」——错。Pod 只被调度一次,节点宕机后是靠控制器重建一个新 Pod,而非原 Pod 迁移。
- ❌ 「容器退出后立刻重启」——错。kubelet 会按 back-off 退避(10s、20s、40s…)重启。
关联
- 上游:6. pod · 7. Pod生命周期和探针
- 同域:Kubernetes技术栈总览 · [Kubernetes Service与服务发现](./Kubernetes Service与服务发现)
- 域地图:运维与云原生